package com.qf.smsplatform.strategy.service.impl;

import com.qf.smsplatform.common.constants.CacheConstants;
import com.qf.smsplatform.common.constants.StrategyConstants;
import com.qf.smsplatform.common.index.StandardSubmit;
import com.qf.smsplatform.strategy.service.FilterChain;
import com.qf.smsplatform.strategy.service.api.CacheService;
import com.qf.smsplatform.strategy.util.PushMessageUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

/**
 * 作者：郝国栋
 * 项目名：IntelliJ IDEA
 * 时间:2020/8/26  16:10
 * 描述:黑名单策略
 */
@Service(value = "black")
@Slf4j
public class BlackStrategy implements FilterChain {

    @Resource
    private CacheService cacheService;

    @Resource
    private PushMessageUtil pushMessage;


    @Override
    public boolean strategy(StandardSubmit submit) {
        log.info("【黑名单策略】 黑名单策略执行了....");
        //1. submit中获取发送的手机号码.
        String mobile = submit.getDestMobile();

        //2. 通过cacheService,将手机号作为key去redis查询
        String result = cacheService.get(CacheConstants.CACHE_PREFIX_BLACK + mobile);
        if (StringUtils.isEmpty(result) || !result.equalsIgnoreCase("1")){
            //3. 正常返回true,记录日志,放行即可.
            log.info("【黑名单策略】 校验通过!");
            return true;
        }else {
            //4. 返回1,证明手机号是黑名单 --- 如果是黑名单,需要发送什么消息,返回false
            log.info("【黑名单策略】 校验失败!");
            //4.1 发送消息,Submit,作为记录日志的信息  TOPIC_SMS_SEND_LOG
            pushMessage.pushLog(submit, StrategyConstants.STRATEGY_ERROR_BLACK);
            //4.2 发送消息,Report,作为给接口模块接收的消息,接口模块要给客户一个回调. TOPIC_PUSH_SMS_REPORT
            pushMessage.pushReport(submit,StrategyConstants.STRATEGY_ERROR_BLACK);
            //4.3 黑名单为通过,返回false.
            return false;
        }

    }
}
